EEG数据分析时如何对分段数据进行伪迹检测与排除?
之前,我们推出了 基于Matlab、EEGLab和ERPlab的偏侧化差异波(N2pc/Pd/CDA )成分分析方法 一文,在推文中鉴于篇幅有限,我们仅仅举例说明了在进行偏侧化成分分析时,基于ERPlab对分段数据进行伪迹检测与排除的一种方法,未能详尽地对伪迹检测和排除的方法和实现过程进行介绍。
第一部分 伪迹检测的基本过程
选择伪迹检测方法。如:Step-like artifacts等。
选择伪迹检测阈值。如:±75 μv。
肉眼检测。如:基于已有的经验,肉眼识别后手动进行伪迹排除。
第二部分 常见伪迹及检测方法
关于常见伪迹的介绍可进一步阅读以下书籍:
[1]Steven J. Luck(著),洪祥飞(译)(2019).事件相关电位基础(第二版),华东师范大学出版社.
[2]Luck,S.J.(2014).An introduction to the event-related potential technique(2nd). MIT press.
第三部分 伪迹检测和排除的具体实现过程
(以Hakim et al.,2020为例)
在进行偏侧化成分分析时,我们需要尽可能避免眼动(Eye Movement)、眨眼(Blinks)、漂移(Drift)、肌肉伪迹(Muscle Artifacts)、阻塞(Blocking)等伪迹对成分的干扰。
通过sliding window step function 对水平眼电(HEOG)对眼动进行检测。在每个试次中,以100 ms为时间窗每次以10 ms 进行移动,如果幅值变化超过20 μv 则被标记为眼动伪迹并排除。示例代码如下:
tic
markH = NaN(1,nTrials);
heogDat = squeeze(erp.arfDat.data(:,ismember(chanLabels,'HEOG'),:));
%%%%% check for horizontal eye movements
parfor t = 1:nTrials
rawTS = heogDat(t,:);
eMoveH = step_t(rawTS,rateAcq,eMoveStep,eMoveWin,eMoveThr); % 33 = VEOG channel
markH(t) = artDetect(eMoveH);
end
mark = markH;
erp.arf.eMove = mark;
toc
3.2 眨眼(Blinks)
%%%%% check for blinks
tic
mark = NaN(1,nTrials);
veogDat = squeeze(erp.arfDat.data(:,ismember(chanLabels,'VEOG'),:));
parfor t = 1:nTrials
rawTS = veogDat(t,:);
% Check for blinks using peak-to-peak amplitude
blink = step_t(rawTS,rateAcq,blinkStep,blinkWin,blinkThr); % 33 = VEOG channel
mark(t) = artDetect(blink);
end
erp.arf.blink = mark;
toc
fprintf('checking for eye movements... \n')
tic
3.3 漂移(Drift)
% check for extreme drift in all scalp channles
checkChannel = ~ismember(chanLabels,{'HEOG','VEOG','StimTrak'}); % specify names of channels to skip
if checkChannel(i)
drift = drift_check(rawTS,rateAcq,driftThr);
mark = artDetect(drift);
mark_driftFull(i,t) = mark;
end
% check for extreme channel drop out (step function) in all scalp channles
checkChannel = ~ismember(chanLabels,{'HEOG','VEOG','StimTrak'}); % specify names of channels to skip
if checkChannel(i)
dropout = step_t(rawTS,rateAcq,dropoutStep,dropoutWin,dropoutThr);
mark = artDetect(dropout);
mark_dropoutFull(i,t) = mark;
end
3.4 肌肉伪迹(Muscle Artifacts)
% check for noise in all scalp channels
checkChannel = ~ismember(chanLabels,{'HEOG','VEOG','StimTrak'}); % specify names of channels to skip
if checkChannel(i)
noise = ppa(rawTS,rateAcq,noiseThr);
mark = artDetect(noise);
mark_noiseFull(i,t) = mark;
end
3.5 阻塞(Blocking)
% check for blocking in all channels except StimTrak
checkChannel = ~ismember(chanLabels,'StimTrak'); % specify names of channels to skip
if checkChannel(i)
block = blockReject(rawTS,rateAcq);
mark = artDetect(block);
mark_blockingFull(i,t) = mark;
end
注:关于伪迹检测具体实现的更多细节,可以阅读文献:Hakim, N., Feldmann-Wüstefeld, T., Awh, E., & Vogel, E. K. (2020). Perturbing neural representations of working memory with task-irrelevant interruption. Journal of Cognitive Neuroscience, 32(3), 558-569.
扩展阅读:
ERPLAB中计算差异波(即:对侧减同侧;N2pc\Pd\CDA)